package cn.funeralobjects.model;

/**
 * @author FuneralObjects
 * Create date: 2020/4/15 6:37 AM
 */
public interface EnumNumberPair<E extends Enum<E>, N extends Number> {

    /**
     * 通过number对象获取对象
     *
     * @param num       number对象
     * @param enumClass 枚举类类型对象
     * @param <E>       枚举类
     * @param <R>       实现了EnumNumberPair的枚举类
     * @param <N>       实现了Number的包装类
     * @return 枚举对象
     */
    @SuppressWarnings("unchecked")
    static <E extends Enum<E>, R extends EnumNumberPair<E, N>, N extends Number> E of(N num, Class<R> enumClass) {

        if (num == null) {
            return null;
        }
        for (R enumConstant : enumClass.getEnumConstants()) {
            if (enumConstant.getNumber().equals(num)) {
                return (E) enumConstant;
            }
        }
        return null;
    }

    /**
     * 获取number对象
     *
     * @return Number
     */
    N getNumber();
}
